package com.cyh.service.impl;

import com.cyh.dao.UserDao;
import com.cyh.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

//<bean id="userService" class="com.cyh.service.impl.UserServiceImpl">
//@Component("userService")
@Service("userService")   //还有一个@Controller注解是指控制层语义
//@Scope("prototype") //有prototy和singleton两个值，更清单文件类似功能，多例和单例的关系
public class UserServiceImpl implements UserService {
    //<property name="userDao" ref="userDao"></property>
    //@Autowired  //如果只有这个注解，没有下面这个注解，则必须按照数据类型从spring容器中进行匹配，只有一个bean时才可以用这种方式，否则加上下面这句注解
    //@Qualifier("userDao") //是按照id值从容器中进行匹配，但是此处要与@Autowired一起使用
    @Resource(name = "userDao") //上两个注解结合就是这个注解了
    private UserDao userDao;


    @Value("宝马") //普通类型的注入
    private String driver;

    @Value("${jdbc.driver}") //在applicationContext.xm引入外部配置文件jdbc.properties, 然后直接用这种方式引用
    private String driver2;

    //如果使用xml配置的方式，这个方法是需要写，如果使用注解方式，这个方法不需要写
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void save() {
        System.out.println(driver);
        System.out.println(driver2);
        userDao.save();
    }

    @PostConstruct
    public void init() {
      System.out.println("对象的初始化方法");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("对象的销毁方法");
    }
}
